define([ "modules/instruktor" ], function(instruktor) {
	
	var listStore = null;
	var selectedRow = null;
	
	return {
		createGrid : function(config) {
			require([ "dojox/grid/DataGrid", "dojo/_base/xhr", "dojo/domReady!", "dojo/data/ItemFileWriteStore"], 
				function(DataGrid, xhr, ifws) {
					var grid = new DataGrid({
						id: 'instruktorzyGrid',
						height: '400px',
						query : {
							id : "*"
						},
						queryOptions : {},
						structure : [{
							name : "Imie",
							field : "imie",
							width : "25%"
						}, {
							name : "Nazwisko",
							field : "nazwisko",
							width : "25%"
						}],
						onRowClick : function(e) {
							var row = this.getItem(e.rowIndex);
							
							selectedRow = row;
							
							require(["dojo/dom", "modules/kursant", "dijit/registry", "modules/instruktor"], function(dom, kursant, registry, thisObj) {
							    dom.byId("instruktorImie").innerHTML = "Imie: " + row.imie;
							    dom.byId("instruktorNazwisko").innerHTML = "Nazwisko: " + row.nazwisko;
							    dom.byId("instruktorLogin").innerHTML = "Login: " + row.login;
							    dom.byId("instruktorTelefon").innerHTML = "Telefon: " + row.telefon;
							    dom.byId("instruktorUlica").innerHTML = "Ulica: " + row.ulica;
							    dom.byId("instruktorMiasto").innerHTML = "Miasto: " + row.miasto;
							    
							    var node = dojo.byId('gridInstruktorKursanci');
							    var kartyNode = dojo.byId('gridKartyPracy');
							    
							    if (node != null) {
								    var gridNode = dom.byId(node);
								    var grid = registry.byNode(gridNode);
								    var url = 'instruktor!kursanciList.action?instruktorId=' + row.id;
								    grid.setUrl(url);
								    grid.reloadStore();
								    
								    var gridKartyNode = dom.byId(kartyNode);
								    var gridKartyPracy = registry.byNode(gridKartyNode);
								    var url2 = 'karty!list.action?instruktorId=' + row.id;
								    
								    gridKartyPracy.setUrl(url2);
								    gridKartyPracy.reloadStore();		    
							    } else {
								    kursant.createGrid({
								        url: 'instruktor!kursanciList.action?instruktorId=' + row.id,
								        gridDiv: 'windowInstruktorKursanci',
									    gridId: 'gridInstruktorKursanci',
									    czyInstruktorzy: true
								    });
									require(['modules/instruktor'], function(instruktor) {
									    instruktor.createKartyPracyGrid({
									        url: 'karty!list.action?instruktorId=' + row.id,
									        gridDiv: 'gridKartyPracy',
									        gridId: 'gridKartyPracy'
									    });
									});
							    }
							    
							    thisObj.createKursanciToolbar({
							    	divId: 'toolbarInstruktorKursanci',
							    	url: 'instruktor!przypiszKursanta.action',
							    	formId: 'assignKursantForm'
							    });
							});
						},
						reloadStore: function() {
							xhr.get({
								url : config.url,
								handleAs : "json"
							}).then(function(data2) {
								   listStore = new dojo.data.ItemFileWriteStore({
								        data: {
								            items: data2
								        }
								    });
								   grid.setStore(listStore);
							});
						}
					}, config.gridDiv);

					grid.reloadStore();
					grid.startup();
				});
		},
		createKursanciToolbar: function(config) {
			require(["dojo/ready", "dijit/Toolbar", "dijit/form/Button", "dojo/dom", "dijit/registry"], function(ready, Toolbar, Button) {
				var node = dojo.byId('kursanciInstruktorToolbar');
			    if (node == null) {
			    	var toolbar = new Toolbar({
			    		id: 'kursanciInstruktorToolbar'
			    	}, config.divId);
			    	
					var addButton = new Button({
						label : 'Dodaj',
						showLabel : true,
						iconClass : "dijitIconNewTask",
						onClick : function() {
							require(['modules/ep'], function(ep) {
								var instruktorId = null;
								var kursantId = null;
								var postObject = null;
								
								ep.createPostWindow({
									id: 'assignKursantWindow',
									title: 'Wybierz kursanta',
									windowUrl: 'instruktor!przypiszKursanta.action',
									postQueryObject: postObject,
									beforeSubmit: function () {
										instruktorId = selectedRow.id;
										kursantId = dijit.byId('comboKursanci').item.id;
										this.onSuccess =  function() {
											dojo.xhrPost({
												url: 'instruktor!assignKursant.action',
												content: {
													'instruktorId': instruktorId,
													'kursantId': kursantId 
										        },
										        load: function(response, ioArgs) {
										           ep.showMsg(response);
										           dijit.byId('gridInstruktorKursanci').reloadStore();
										        },
										        error : function(error) {
										        	alert("Sprawdź połączenie internetowe !");
										        }
										   });
										}
									},
									onSuccess: function(resp) {
										// ... nie uzywana
									}
								});
							});
						}
					});
					
					var deleteButton = new Button({
						label : 'Usuń',
						showLabel : true,
						iconClass : "dijitIconDelete",
						onClick : function() {
							require(["modules/ep"], function(ep) {
								ep.createActionDialog({
									id: "confirmWindow",
									title: "Pytanie",
									content: "Czy na pewno chcesz wypisać kursanta od wybranego instruktora ?",
									beforeSubmit: function() {},
									onSuccess: function() {
										var row = dijit.byId('gridInstruktorKursanci').selection.getSelected();
										var kursantId = row[0].id;
										var instruktorId = selectedRow.id;
										var queryObject = {
												"kursantId": kursantId,
												"instruktorId": instruktorId
										}
										ep.requestPost('instruktor!unassignKursant.action', queryObject, function(response) {
											ep.showMsg(response);
											dijit.byId('gridInstruktorKursanci').reloadStore();
										})
										
									}
								}) 
							});
						}
					});
			    	
					toolbar.addChild(addButton);
					toolbar.addChild(deleteButton);
			    }
			})
		},
		createToolbar : function(config) {
			require([ "dojo/ready", "dijit/Toolbar", "dijit/form/Button",
			          "dojo/_base/xhr", "dijit/Dialog", "dojo/dom",
			          "dijit/registry", 'modules/ep'], function(ready, Toolbar, Button, xhr, Dialog, dom, registry, ep) {
					var toolbar = new Toolbar({}, config.divId);					
					
					var addButton = new Button({
						label : 'Dodaj',
						showLabel : true,
						iconClass : "dijitIconNewTask",
						onClick : function() {
							ep.createFormWindow({
								id: 'addInstruktorWindow',
								formId: 'myForm',
								title: 'Dodaj instruktora',
								url: 'instruktor!add.action',
								onSuccess: function(response) {
								    var gridNode = dom.byId("instruktorzyGrid");
								    var grid = registry.byNode(gridNode);
								    grid.reloadStore();
									
								    ep.showMsg(response);
								}
							})
						}
					});
					
					var editButton = new Button({
						label : 'Edytuj',
						showLabel : true,
						iconClass : "dijitIconEdit",
						onClick : function() {
							    var gridNode = dom.byId("instruktorzyGrid");
							    var grid = registry.byNode(gridNode);
								ep.createFormWindow({
									id: 'editInstruktorWindow',
									formId: 'myForm',
									title: 'Edytuj instruktora',
									url: 'instruktor!edit.action?instruktorId=' + selectedRow.id,
									onSuccess: function(resp) {
									    grid.reloadStore();
									    ep.showMsg(resp);
									}
								});
						}
					});
					
					var deleteButton = new Button({
						label : 'Usuń',
						showLabel : true,
						iconClass : "dijitIconDelete",
						onClick : function() {
							
							ep.createActionDialog({
								id: "confirmWindow",
								title: "Pytanie",
								content: "Czy na pewno chcesz usunąć wybranego instruktora ?",
								onSuccess: function() {
									var gridDiv = dom.byId("instruktorzyGrid");
									var grid = registry.byNode(gridDiv);
									ep.requestGet("instruktor!delete.action?instruktorId=" + selectedRow.id, function(response) {
										ep.showMsg(response);
										grid.reloadStore();
									});
								}
							}) 
						}
					});
					
					toolbar.addChild(addButton);
					toolbar.addChild(editButton);
					toolbar.addChild(deleteButton);
				});
		},
		createKartyPracyGrid :function(config) {
			require([ "dojox/grid/DataGrid", "dojo/_base/xhr", "dojo/domReady!", "dojo/data/ItemFileWriteStore" ], function(DataGrid, xhr, dom ,ifws) {
				var cmKartyPracy = [{
					name : "Data",
					field : "data",
					width : "25%"
				}, {
					name : "Godziny jazdy",
					field : "godzinyJazdy",
					width : "25%"
				}, {
					name : "Godziny wykładów",
					field : "godzinyWykladow",
					width : "25%"
				}, {
					name : "Godziny pozostałe",
					field : "godzinyPozostale",
					width : "25%"
				}, {
					name : "Status karty",
					field : "statusKarty",
					width : "25%",
					formatter : function (value, rowIndex) {
						if (value == "OCZEKIWANIE") { 
							return "<span style='color: blue'>Oczekiwanie</span>";
			
						} else if (value == "ZATWIERDZONA") {
							return "<span style='color: green'>Zatwierdzona</span>";
							
						} else if (value == "NIE_ZATWIERDZONA") {
							return "<span style='color: red'>Nie zatwierdzona</span>";
						}
						
						return 'Nieznany status';
					}
				}];
				
				var grid = new DataGrid({
					id: config.gridId,
					height: '260px',
					query : {
						id : "*"
					},
					queryOptions : {},
					structure : cmKartyPracy,
					reloadStore: function() {
						xhr.get({
							url : config.url,
							handleAs : "json"
						}).then(function(data2) {
							   listStore = new dojo.data.ItemFileWriteStore({
							        data: {
							            items: data2
							        }
							    });
							   grid.setStore(listStore);
						});
					},
					setUrl : function(url) {
						config.url = url;
					}
				}, config.gridDiv);

				grid.reloadStore();
				grid.startup();
			});
		},
		createKartyPracyToolbar : function(config) {
			require([ "dojo/ready", "dijit/Toolbar", "dijit/form/Button",
			          "dojo/_base/xhr", "dijit/Dialog", "dojo/dom",
			          "dijit/registry", 'modules/ep'], function(ready, Toolbar, Button, xhr, Dialog, dom, registry, ep) {
					var toolbar = new Toolbar({}, config.divId);					
					
					var confirmButton = new Button({
						label : 'Zatwierdź',
						showLabel : true,
						iconClass : "dijitIconBookmark",
						onClick : function() {
							var gridDiv = dom.byId("gridKartyPracy");
							var grid = registry.byNode(gridDiv);
							var row = grid.selection.getSelected();
							if (row[0] == 'undefined' || row[0] == null) {
								ep.showMsg('Proszę wybrać kartę');
								return;
								
							};
							ep.createActionDialog({
								id: 'confirmWindow',
								title: 'Pytanie',
								content: 'Czy chcesz zatwierdzić wybraną kartę ?',
								beforeSubmit: function() { },
								onSuccess: function() {
									var gridDiv = dom.byId("gridKartyPracy");
									var grid = registry.byNode(gridDiv);
									ep.requestGet("karty!zatwierdz.action?kartaId=" + row[0].id, function(response) {
										ep.showMsg(response);
										grid.reloadStore();
									});
								}
							});
						}
					});
					
					var rejectButton = new Button({
						label : 'Odrzuć',
						showLabel : true,
						iconClass : "dijitIconDelete",
						onClick : function() {
							var gridDiv = dom.byId("gridKartyPracy");
							var grid = registry.byNode(gridDiv);
							var row = grid.selection.getSelected();
							if (row[0] == 'undefined' || row[0] == null) {
								ep.showMsg('Proszę wybrać kartę');
								return;
								
							};
							ep.createActionDialog({
								id: 'confirmWindow',
								title: 'Pytanie',
								content: 'Czy chcesz odrzucić wybraną kartę ?',
								beforeSubmit: function() { },
								onSuccess: function() {
									var gridDiv = dom.byId("gridKartyPracy");
									var grid = registry.byNode(gridDiv);
									ep.requestGet("karty!odrzuc.action?kartaId=" + row[0].id, function(response) {
										ep.showMsg(response);
										grid.reloadStore();
									});
								}
							});
						}
					});
					
					toolbar.addChild(confirmButton);
					toolbar.addChild(rejectButton);
				});
		}
	}
});